home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / border / TitledBorder.class (.txt) < prev   
Encoding:
Java Class File  |  1999-07-15  |  7.4 KB  |  365 lines

  1. package javax.swing.border;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Insets;
  10. import java.awt.Point;
  11. import java.awt.Rectangle;
  12. import javax.swing.UIManager;
  13.  
  14. public class TitledBorder extends AbstractBorder {
  15.    protected String title;
  16.    protected Border border;
  17.    protected int titlePosition;
  18.    protected int titleJustification;
  19.    protected Font titleFont;
  20.    protected Color titleColor;
  21.    private Point textLoc;
  22.    public static final int DEFAULT_POSITION = 0;
  23.    public static final int ABOVE_TOP = 1;
  24.    public static final int TOP = 2;
  25.    public static final int BELOW_TOP = 3;
  26.    public static final int ABOVE_BOTTOM = 4;
  27.    public static final int BOTTOM = 5;
  28.    public static final int BELOW_BOTTOM = 6;
  29.    public static final int DEFAULT_JUSTIFICATION = 0;
  30.    public static final int LEFT = 1;
  31.    public static final int CENTER = 2;
  32.    public static final int RIGHT = 3;
  33.    protected static final int EDGE_SPACING = 2;
  34.    protected static final int TEXT_SPACING = 2;
  35.    protected static final int TEXT_INSET_H = 5;
  36.  
  37.    public TitledBorder(String var1) {
  38.       this((Border)null, var1, 1, 2, (Font)null, (Color)null);
  39.    }
  40.  
  41.    public TitledBorder(Border var1) {
  42.       this(var1, "", 1, 2, (Font)null, (Color)null);
  43.    }
  44.  
  45.    public TitledBorder(Border var1, String var2) {
  46.       this(var1, var2, 1, 2, (Font)null, (Color)null);
  47.    }
  48.  
  49.    public TitledBorder(Border var1, String var2, int var3, int var4) {
  50.       this(var1, var2, var3, var4, (Font)null, (Color)null);
  51.    }
  52.  
  53.    public TitledBorder(Border var1, String var2, int var3, int var4, Font var5) {
  54.       this(var1, var2, var3, var4, var5, (Color)null);
  55.    }
  56.  
  57.    public TitledBorder(Border var1, String var2, int var3, int var4, Font var5, Color var6) {
  58.       this.textLoc = new Point();
  59.       this.title = var2;
  60.       this.border = var1;
  61.       this.titleFont = var5;
  62.       this.titleColor = var6;
  63.       this.setTitleJustification(var3);
  64.       this.setTitlePosition(var4);
  65.    }
  66.  
  67.    private static boolean computeIntersection(Rectangle var0, int var1, int var2, int var3, int var4) {
  68.       int var5 = Math.max(var1, var0.x);
  69.       int var6 = Math.min(var1 + var3, var0.x + var0.width);
  70.       int var7 = Math.max(var2, var0.y);
  71.       int var8 = Math.min(var2 + var4, var0.y + var0.height);
  72.       var0.x = var5;
  73.       var0.y = var7;
  74.       var0.width = var6 - var5;
  75.       var0.height = var8 - var7;
  76.       return var0.width > 0 && var0.height > 0;
  77.    }
  78.  
  79.    public Border getBorder() {
  80.       Border var1 = this.border;
  81.       if (var1 == null) {
  82.          var1 = UIManager.getBorder("TitledBorder.border");
  83.       }
  84.  
  85.       return var1;
  86.    }
  87.  
  88.    public Insets getBorderInsets(Component var1) {
  89.       return this.getBorderInsets(var1, new Insets(0, 0, 0, 0));
  90.    }
  91.  
  92.    public Insets getBorderInsets(Component var1, Insets var2) {
  93.       int var4 = 0;
  94.       int var5 = 16;
  95.       Border var6 = this.getBorder();
  96.       if (var6 != null) {
  97.          if (var6 instanceof AbstractBorder) {
  98.             ((AbstractBorder)var6).getBorderInsets(var1, var2);
  99.          } else {
  100.             Insets var7 = var6.getBorderInsets(var1);
  101.             var2.top = var7.top;
  102.             var2.right = var7.right;
  103.             var2.bottom = var7.bottom;
  104.             var2.left = var7.left;
  105.          }
  106.       } else {
  107.          var2.left = var2.top = var2.right = var2.bottom = 0;
  108.       }
  109.  
  110.       var2.left += 4;
  111.       var2.right += 4;
  112.       var2.top += 4;
  113.       var2.bottom += 4;
  114.       if (var1 != null && this.getTitle() != null && !this.getTitle().equals("")) {
  115.          Font var8 = this.getFont(var1);
  116.          FontMetrics var3 = var1.getFontMetrics(var8);
  117.          if (var3 != null) {
  118.             var4 = var3.getDescent();
  119.             var5 = var3.getAscent();
  120.          }
  121.  
  122.          switch (this.getTitlePosition()) {
  123.             case 0:
  124.             case 2:
  125.                var2.top += var5 + var4;
  126.                break;
  127.             case 1:
  128.                var2.top += var5 + var4 + (Math.max(2, 4) - 2);
  129.                break;
  130.             case 3:
  131.                var2.top += var5 + var4 + 2;
  132.                break;
  133.             case 4:
  134.                var2.bottom += var5 + var4 + 2;
  135.                break;
  136.             case 5:
  137.                var2.bottom += var5 + var4;
  138.                break;
  139.             case 6:
  140.                var2.bottom += var5 + 2;
  141.          }
  142.  
  143.          return var2;
  144.       } else {
  145.          return var2;
  146.       }
  147.    }
  148.  
  149.    protected Font getFont(Component var1) {
  150.       Font var2;
  151.       if ((var2 = this.getTitleFont()) != null) {
  152.          return var2;
  153.       } else {
  154.          return var1 != null && (var2 = var1.getFont()) != null ? var2 : new Font("Dialog", 0, 12);
  155.       }
  156.    }
  157.  
  158.    public Dimension getMinimumSize(Component var1) {
  159.       Insets var2 = this.getBorderInsets(var1);
  160.       Dimension var3 = new Dimension(var2.right + var2.left, var2.top + var2.bottom);
  161.       Font var4 = this.getFont(var1);
  162.       FontMetrics var5 = var1.getFontMetrics(var4);
  163.       switch (this.titlePosition) {
  164.          case 0:
  165.          case 2:
  166.          case 3:
  167.          case 4:
  168.          case 5:
  169.          default:
  170.             var3.width += var5.stringWidth(this.getTitle());
  171.             break;
  172.          case 1:
  173.          case 6:
  174.             var3.width = Math.max(var5.stringWidth(this.getTitle()), var3.width);
  175.       }
  176.  
  177.       return var3;
  178.    }
  179.  
  180.    public String getTitle() {
  181.       return this.title;
  182.    }
  183.  
  184.    public Color getTitleColor() {
  185.       Color var1 = this.titleColor;
  186.       if (var1 == null) {
  187.          var1 = UIManager.getColor("TitledBorder.titleColor");
  188.       }
  189.  
  190.       return var1;
  191.    }
  192.  
  193.    public Font getTitleFont() {
  194.       Font var1 = this.titleFont;
  195.       if (var1 == null) {
  196.          var1 = UIManager.getFont("TitledBorder.font");
  197.       }
  198.  
  199.       return var1;
  200.    }
  201.  
  202.    public int getTitleJustification() {
  203.       return this.titleJustification;
  204.    }
  205.  
  206.    public int getTitlePosition() {
  207.       return this.titlePosition;
  208.    }
  209.  
  210.    public boolean isBorderOpaque() {
  211.       return false;
  212.    }
  213.  
  214.    public void paintBorder(Component var1, Graphics var2, int var3, int var4, int var5, int var6) {
  215.       Border var7 = this.getBorder();
  216.       if (this.getTitle() != null && !this.getTitle().equals("")) {
  217.          Rectangle var8 = new Rectangle(var3 + 2, var4 + 2, var5 - 4, var6 - 4);
  218.          Font var9 = var2.getFont();
  219.          Color var10 = var2.getColor();
  220.          var2.setFont(this.getFont(var1));
  221.          FontMetrics var11 = var2.getFontMetrics();
  222.          int var12 = var11.getHeight();
  223.          int var13 = var11.getDescent();
  224.          int var14 = var11.getAscent();
  225.          int var16 = var11.stringWidth(this.getTitle());
  226.          Insets var17;
  227.          if (var7 != null) {
  228.             var17 = var7.getBorderInsets(var1);
  229.          } else {
  230.             var17 = new Insets(0, 0, 0, 0);
  231.          }
  232.  
  233.          int var18 = this.getTitlePosition();
  234.          switch (var18) {
  235.             case 0:
  236.             case 2:
  237.                int var21 = Math.max(0, var14 / 2 + 2 - 2);
  238.                var8.y += var21;
  239.                var8.height -= var21;
  240.                this.textLoc.y = var8.y - var13 + (var17.top + var14 + var13) / 2;
  241.                break;
  242.             case 1:
  243.                int var15 = var14 + var13 + (Math.max(2, 4) - 2);
  244.                var8.y += var15;
  245.                var8.height -= var15;
  246.                this.textLoc.y = var8.y - (var13 + 2);
  247.                break;
  248.             case 3:
  249.                this.textLoc.y = var8.y + var17.top + var14 + 2;
  250.                break;
  251.             case 4:
  252.                this.textLoc.y = var8.y + var8.height - (var17.bottom + var13 + 2);
  253.                break;
  254.             case 5:
  255.                var8.height -= var12 / 2;
  256.                this.textLoc.y = var8.y + var8.height - var13 + (var14 + var13 - var17.bottom) / 2;
  257.                break;
  258.             case 6:
  259.                var8.height -= var12;
  260.                this.textLoc.y = var8.y + var8.height + var14 + 2;
  261.          }
  262.  
  263.          switch (this.getTitleJustification()) {
  264.             case 0:
  265.             case 1:
  266.                this.textLoc.x = var8.x + 5 + var17.left;
  267.                break;
  268.             case 2:
  269.                this.textLoc.x = var8.x + (var8.width - var16) / 2;
  270.                break;
  271.             case 3:
  272.                this.textLoc.x = var8.x + var8.width - (var16 + 5 + var17.right);
  273.          }
  274.  
  275.          if (var7 != null) {
  276.             if (var18 != 2 && var18 != 5) {
  277.                var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  278.             } else {
  279.                Rectangle var19 = new Rectangle();
  280.                Rectangle var20 = var2.getClipBounds();
  281.                var19.setBounds(var20);
  282.                if (computeIntersection(var19, var3, var4, this.textLoc.x, var6)) {
  283.                   var2.setClip(var19);
  284.                   var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  285.                }
  286.  
  287.                var19.setBounds(var20);
  288.                if (computeIntersection(var19, this.textLoc.x + var16, 0, var5 - var16 - this.textLoc.x, var6)) {
  289.                   var2.setClip(var19);
  290.                   var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  291.                }
  292.  
  293.                var19.setBounds(var20);
  294.                if (var18 == 2) {
  295.                   if (computeIntersection(var19, this.textLoc.x, var8.y + var17.top, var16, var6 - var8.y - var17.top)) {
  296.                      var2.setClip(var19);
  297.                      var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  298.                   }
  299.                } else if (computeIntersection(var19, this.textLoc.x, var4, var16, var6 - var17.bottom - (var6 - var8.height - var8.y))) {
  300.                   var2.setClip(var19);
  301.                   var7.paintBorder(var1, var2, var8.x, var8.y, var8.width, var8.height);
  302.                }
  303.  
  304.                var2.setClip(var20);
  305.             }
  306.          }
  307.  
  308.          var2.setColor(this.getTitleColor());
  309.          var2.drawString(this.getTitle(), this.textLoc.x, this.textLoc.y);
  310.          var2.setFont(var9);
  311.          var2.setColor(var10);
  312.       } else {
  313.          if (var7 != null) {
  314.             var7.paintBorder(var1, var2, var3, var4, var5, var6);
  315.          }
  316.  
  317.       }
  318.    }
  319.  
  320.    public void setBorder(Border var1) {
  321.       this.border = var1;
  322.    }
  323.  
  324.    public void setTitle(String var1) {
  325.       this.title = var1;
  326.    }
  327.  
  328.    public void setTitleColor(Color var1) {
  329.       this.titleColor = var1;
  330.    }
  331.  
  332.    public void setTitleFont(Font var1) {
  333.       this.titleFont = var1;
  334.    }
  335.  
  336.    public void setTitleJustification(int var1) {
  337.       switch (var1) {
  338.          case 0:
  339.          case 1:
  340.          case 2:
  341.          case 3:
  342.             this.titleJustification = var1;
  343.             return;
  344.          default:
  345.             throw new IllegalArgumentException(var1 + " is not a valid title justification.");
  346.       }
  347.    }
  348.  
  349.    public void setTitlePosition(int var1) {
  350.       switch (var1) {
  351.          case 0:
  352.          case 1:
  353.          case 2:
  354.          case 3:
  355.          case 4:
  356.          case 5:
  357.          case 6:
  358.             this.titlePosition = var1;
  359.             return;
  360.          default:
  361.             throw new IllegalArgumentException(var1 + " is not a valid title position.");
  362.       }
  363.    }
  364. }
  365.